Файл: GraphEditor.txt
Дата: 10.04.2014
1:
2:
3:
4:
5: присвоить ДАННЫЕ_ИЗ_ИНТЕРНЕТ 1
6:
7: функция Применить_правило символ начало конец номер_правила голова_правила хвост_правила
8: память локальный новый_символ новый_хвост_правила позиция_сцепки новый_конец
9:
10: данные использовать [ОБЛАСТЬ_ГИПОТЕЗЫ]
11:
12: если [хвост_правила] == {}
13: Добавить_гипотезу [голова_правила] [начало] [конец] [номер_правила]
14: иначе
15: список голова новый_символ [хвост_правила]
16: список хвост новый_хвост_правила [хвост_правила]
17: вычислить + позиция_сцепки [конец] 1
18:
19: факт сопоставить факты_кандидаты "r;<гипотеза>;[новый_символ];[позиция_сцепки];[?];[?]"
20: для [факты_кандидаты]
21: список взять новый_конец (факт взять $результат [$ОбъектЦикла] ) 5
22: Применить_правило [новый_символ] [начало] [новый_конец] [номер_правила] [голова_правила] [новый_хвост_правила]
23: следующий
24: конец
25: возврат
26:
27:
28:
29: функция Добавить_гипотезу символ начало конец номер_правила
30: память локальный гипотеза
31:
32: данные использовать [ОБЛАСТЬ_ГИПОТЕЗЫ]
33:
34: присвоить гипотеза "r;<гипотеза>;[символ];[начало];[конец];[номер_правила]"
35: если (факт сопоставить $результат [гипотеза] )
36: иначе
37: факт добавить [гипотеза]
38: присвоить ПРАВИЛО_ПРИМЕНЕНО да
39: когда [ОТЛАДКА] печать "ДОБАВЛЕНО: [гипотеза]"
40: конец
41: возврат
42:
43: функция Грамматический_разбор
44: память локальный номер_факта успех \
45: текущее_слово текущее_слово_позиция1 текущее_слово_позиция2 э3 э5 номер_итерации
46:
47:
48: присвоить ПРАВИЛО_ПРИМЕНЕНО да номер_итерации 0
49: пока [ПРАВИЛО_ПРИМЕНЕНО]
50: присвоить ПРАВИЛО_ПРИМЕНЕНО ''
51:
52: увеличить номер_итерации
53: когда [ОТЛАДКА] печать '' "Итерация N:[номер_итерации]"
54:
55:
56: данные использовать [ОБЛАСТЬ_ГИПОТЕЗЫ]
57: присвоить номер_факта 1 количество_фактов [$КоличествоФактов]
58: пока [номер_факта] <= [количество_фактов]
59: список сопоставить успех (факт взять $результат [номер_факта] ) "r;<гипотеза>;[?текущее_слово];[?текущее_слово_позиция1];[?текущее_слово_позиция2];[?]"
60: если [успех]
61:
62: данные использовать [ОБЛАСТЬ_ПРАВИЛА]
63: для (факт сопоставить $результат "r;<правило>;[?];[текущее_слово];[?]" )
64: список сопоставить успех (факт взять $результат [$ОбъектЦикла] ) "r;<правило>;[?э3];[текущее_слово];[?э5]"
65: если [успех]
66: Применить_правило [текущее_слово] [текущее_слово_позиция1] [текущее_слово_позиция2] [$ОбъектЦикла] [э3] [э5]
67: конец
68: данные использовать [ОБЛАСТЬ_ПРАВИЛА]
69: следующий
70: конец
71: увеличить номер_факта
72: данные использовать [ОБЛАСТЬ_ГИПОТЕЗЫ]
73: цикл
74: цикл
75: возврат
76:
77: функция Обработка_слова слово_исходное номер_слова
78: память локальный слово морфология
79: память локальный слово_свойства слово_категории слово_база слово_часть_речи
80:
81: присвоить слово_свойства {} слово_категории {}
82: строка строчные слово [слово_исходное]
83:
84: присвоить "ПРЕДЛ;[номер_слова];слово" [слово_исходное] \
85: "ПРЕДЛ;[номер_слова];слово_нр" [слово] \
86: "ПРЕДЛ;[номер_слова];слово_вр" (строка прописные $результат [слово_исходное]) \
87: "ПРЕДЛ;[номер_слова];регистр" '' \
88: "ПРЕДЛ;[номер_слова];класс" '' \
89: "ПРЕДЛ;[номер_слова];свойства" {} \
90: "ПРЕДЛ;[номер_слова];базы" {} \
91: "ПРЕДЛ;[номер_слова];категории" {}
92:
93:
94: если [ПРЕДЛ;[номер_слова];слово] == [ПРЕДЛ;[номер_слова];слово_нр]
95: присвоить "ПРЕДЛ;[номер_слова];регистр" нижний
96: иначе
97: если [ПРЕДЛ;[номер_слова];слово] == [ПРЕДЛ;[номер_слова];слово_вр]
98: присвоить "ПРЕДЛ;[номер_слова];регистр" верхний
99: иначе
100: если (строка размер $результат [слово] ) > 1
101: если (строка взять $результат [ПРЕДЛ;[номер_слова];слово] 1 ) == (строка взять $результат [ПРЕДЛ;[номер_слова];слово_вр] 1 )
102: если (строка удалить $результат [ПРЕДЛ;[номер_слова];слово] 1 1 ) == (строка удалить $результат [ПРЕДЛ;[номер_слова];слово_нр] 1 1 )
103: присвоить "ПРЕДЛ;[номер_слова];регистр" имя_собственное
104: конец
105: конец
106: конец
107: конец
108: конец
109:
110:
111: если (строка размер $результат [слово] ) = 1
112: выбрать [слово_исходное]
113: вариант А;Б;В;Г;Д;Е;Ж;З;И;Й;К;Л;М;Н;О;П;Р;С;Т;У;Ф;Х;Ц;Ч;Ш;Щ;Э;Ю;Я
114:
115: если (список голова $результат [$СписокЦикла] ) == .
116: присвоить слово_свойства "{[слово_исходное];ИНИЦИАЛ}" "ПРЕДЛ;[номер_слова];класс" ИНИЦИАЛ
117: конец
118: вариант '.;,;?;!;+;-;*;/;\;=;>;<;(;);:;";%;$;@'
119: присвоить слово_свойства "{[слово_исходное];ЗНАК_ПРЕПИНАНИЯ}" "ПРЕДЛ;[номер_слова];класс" ЗНАК_ПРЕПИНАНИЯ
120: вариант "'"
121: присвоить слово_свойства "{[слово_исходное];ЗНАК_ПРЕПИНАНИЯ}" "ПРЕДЛ;[номер_слова];класс" ЗНАК_ПРЕПИНАНИЯ
122: конецВыбора
123: конец
124:
125: если [ПРЕДЛ;[номер_слова];класс] == ''
126:
127: если (вычислить являетсяЧислом $результат [слово] )
128: присвоить слово_свойства "{[слово];ЧИСЛО}" "ПРЕДЛ;[номер_слова];класс" ЧИСЛО
129: иначе
130:
131: данные использовать [ОБЛАСТЬ_СЛОВА]
132: понятие над морфология [слово]
133: если [морфология]
134: присвоить слово_свойства [морфология] "ПРЕДЛ;[номер_слова];класс" СЛОВО
135: иначе
136: присвоить слово_свойства [слово] "ПРЕДЛ;[номер_слова];класс" СЛОВО
137: конец
138: конец
139: конец
140:
141:
142: если [ПРЕДЛ;[номер_слова];класс] == СЛОВО
143: данные использовать [ОБЛАСТЬ_КАТЕГОРИИ]
144: для [слово_свойства]
145: присвоить слово_база [$ОбъектЦикла]
146: понятие над слово_категории [слово_база]
147:
148: список сцепить "ПРЕДЛ;[номер_слова];свойства" $ "{[$ОбъектЦикла];[слово_категории]}"
149: множество или "ПРЕДЛ;[номер_слова];базы" $ [слово_база]
150: множество или "ПРЕДЛ;[номер_слова];категории" $ [слово_категории]
151: следующий
152: конец
153: возврат
154:
155: функция Обработка_предложения предложение
156: память очистить ПРЕДЛ
157: присвоить ПРЕДЛ;исходное [предложение] ПРЕДЛ;базы {} ПРЕДЛ;категории {}
158: данные использовать [ОБЛАСТЬ_ГИПОТЕЗЫ]
159: данные новый
160:
161: строка кСпискуСлов ПРЕДЛ;список [ПРЕДЛ;исходное]
162: список размер ПРЕДЛ;количество_слов [ПРЕДЛ;список]
163: для [ПРЕДЛ;список]
164: Обработка_слова [$ОбъектЦикла] [$НомерИтерации]
165: следующий
166:
167: Формирование_начальных_гипотез
168: Грамматический_разбор
169:
170: данные использовать [ОБЛАСТЬ_ГИПОТЕЗЫ]
171: когда [ОТЛАДКА] показать данные
172: возврат
173:
174: функция Формирование_начальных_гипотез
175: память локальный номер_слова
176:
177: данные использовать [ОБЛАСТЬ_ГИПОТЕЗЫ]
178: для номер_слова (список сгенерить $результат 1 [ПРЕДЛ;количество_слов] )
179: если [ПРЕДЛ;[номер_слова];базы] == {}
180: если [ПРЕДЛ;[номер_слова];класс] == ЧИСЛО
181: факт добавить "r;<гипотеза>;ЧИСЛО;[номер_слова];[номер_слова];0"
182: иначе
183: факт добавить "r;<гипотеза>;[ПРЕДЛ;[номер_слова];слово_нр];[номер_слова];[номер_слова];0"
184: конец
185: иначе
186: для [ПРЕДЛ;[номер_слова];базы]
187: факт добавить "r;<гипотеза>;[$ОбъектЦикла];[номер_слова];[номер_слова];0"
188: следующий
189: для [ПРЕДЛ;[номер_слова];категории]
190: факт добавить "r;<гипотеза>;[$ОбъектЦикла];[номер_слова];[номер_слова];0"
191: следующий
192: конец
193: следующий
194: возврат
195:
196:
197:
198:
199:
200:
201:
202: присвоить ОТЛАДКА 0 ОБУЧЕНИЕ 0
203:
204: присвоить ОБЛАСТЬ_КАТЕГОРИИ 2 ОБЛАСТЬ_ПРАВИЛА 3 ОБЛАСТЬ_ГИПОТЕЗЫ 4 ОБЛАСТЬ_СЛОВА 5
205:
206: присвоить ФАЙЛ_КАТЕГОРИИ "cat.txt"
207: присвоить ФАЙЛ_ПРАВИЛА "rule.txt"
208: присвоить ФАЙЛ_СЛОВА "word.txt"
209: присвоить ФАЙЛ_ВРЕМЕННЫЙ "tmp.tmp"
210:
211: Загрузить_данные [ОБЛАСТЬ_КАТЕГОРИИ] [ФАЙЛ_КАТЕГОРИИ]
212: Загрузить_данные [ОБЛАСТЬ_ПРАВИЛА] [ФАЙЛ_ПРАВИЛА]
213: Загрузить_данные [ОБЛАСТЬ_СЛОВА] [ФАЙЛ_СЛОВА]
214:
215:
216:
217: присвоить _ПИ_ 3,141592653589
218: присвоить ОБЛАСТЬ_РИСУНОК 5
219: присвоить ЦЕНТР_Х 300 ЦЕНТР_У 300
220: присвоить ПОЛОЖЕНИЕ_Х [ЦЕНТР_Х] ПОЛОЖЕНИЕ_У [ЦЕНТР_У]
221: присвоить РАЗМЕР_Х 200 РАЗМЕР_У [РАЗМЕР_Х]
222: присвоить КУРСОР_ШАГ_Х [РАЗМЕР_Х] КУРСОР_ШАГ_У [РАЗМЕР_У]
223: вычислить / СДВИГ [РАЗМЕР_Х] 4
224: присвоить МАСШТАБ_ДЛЯ_БОЛЬШОЙ 2
225: вычислить / МАСШТАБ_ДЛЯ_МАЛЫЙ 1 [МАСШТАБ_ДЛЯ_БОЛЬШОЙ]
226: присвоить РАЗМЕР_КУРСОРА 30
227: присвоить КОМАНДА_КОНТЕКСТ '' ФИГУРЫ_КОНТЕКСТ {}
228: присвоить ФАЙЛ_С_РИСУНКОМ "[$ТекущийКаталог]Рисунок1.txt"
229:
230: присвоить предложение 'нарисуй большой синий круг' предложения [предложение]
231: Рисовать_курсор
232: пока [предложение]
233: ввести переменная предложение 'Введите предложение:' (список сцепить $результат '' [предложения] )
234: строка отсечьПробелы предложение $
235: если [предложение]
236: строка коды предложение $ "?;{}_'"
237: список сцепить предложения [предложение] [предложения]
238: Обработка_предложения [предложение]
239: Интерпретация_предложения
240: Перерисовать_рисунок
241: конец
242: цикл
243:
244:
245:
246: если [ОБУЧЕНИЕ]
247: если [ДАННЫЕ_ИЗ_ИНТЕРНЕТ]
248:
249: иначе
250: данные использовать [ОБЛАСТЬ_КАТЕГОРИИ]
251: если [$данныеИзменены]
252: данные сохранить "[$ТекущийКаталог][ФАЙЛ_КАТЕГОРИИ]"
253: конец
254: конец
255: конец
256:
257:
258:
259: функция Интерпретация_предложения
260: память локальный команда
261:
262: память очистить ФРЕЙМ
263: данные использовать [ОБЛАСТЬ_ГИПОТЕЗЫ]
264: факт сопоставитьМножество команда "r;<гипотеза>;[?рез];[?];[?];[?]"
265: множество и команда $ РИСОВАТЬ_ФИГУРУ;ПЕРЕМЕСТИТЬ_КУРСОР;ПОВТОРИТЬ;ИЗМЕНИТЬ_ЦВЕТ;ИЗМЕНИТЬ_РАЗМЕР;ИЗМЕНИТЬ_ПОЛОЖЕНИЕ;ПОВЕРНУТЬ_ФИГУРУ;ПОВЕРНУТЬ_ФИГУРУ_ПО_ЧАСОВОЙ;ПОВЕРНУТЬ_ФИГУРУ_ПРОТИВ_ЧАСОВОЙ;ИЗМЕНИТЬ_ТОЧНОСТЬ;НОВЫЙ_РИСУНОК;ЗАПОМНИТЬ_РИСУНОК;ВСПОМНИТЬ_РИСУНОК;УДАЛИТЬ_ФИГУРУ
266: если (список размер $результат [команда] ) = 1
267: если [команда] == ПОВТОРИТЬ
268: присвоить команда [КОМАНДА_КОНТЕКСТ]
269: иначе
270: присвоить КОМАНДА_КОНТЕКСТ [команда]
271: конец
272: присвоить ФРЕЙМ;команда [команда]
273: Выполнить_команду
274: иначе
275: показать сообщение "Простите, не могу :("
276: данные показать
277: конец
278: возврат
279:
280: функция Выполнить_команду
281: память локальный новый_х новый_у
282:
283: выбрать [ФРЕЙМ;команда]
284: вариант РИСОВАТЬ_ФИГУРУ
285: Определить_свойство фигура _фигура ''
286: Определить_свойство цвет _цвет черный
287: Определить_свойство размер _размер обычный
288: Определить_свойство количество _количество один
289: Рассчитать_фигуру
290: Рисовать_фигуру
291: вариант ПЕРЕМЕСТИТЬ_КУРСОР
292: Определить_свойство направление _направление ''
293: Переместить_курсор
294: вариант ИЗМЕНИТЬ_ЦВЕТ
295: для [ФИГУРЫ_КОНТЕКСТ]
296: Взять_фигуру [$ОбъектЦикла]
297: Определить_свойство цвет _цвет черный
298: Цвет_в_число
299: Изменить_фигуру [$ОбъектЦикла]
300: следующий
301: вариант ИЗМЕНИТЬ_РАЗМЕР
302: для [ФИГУРЫ_КОНТЕКСТ]
303: Взять_фигуру [$ОбъектЦикла]
304: Определить_свойство размер _размер обычный
305: если [ФРЕЙМ;размер] == обычный
306: Определить_свойство размер _изменять_размер обычный
307: конец
308: Масштаб_в_число
309: Изменить_масштаб [ФРЕЙМ;масштаб_число]
310: Изменить_фигуру [$ОбъектЦикла]
311: следующий
312: вариант ИЗМЕНИТЬ_ПОЛОЖЕНИЕ
313: для [ФИГУРЫ_КОНТЕКСТ]
314: Взять_фигуру [$ОбъектЦикла]
315: Определить_свойство направление _направление ''
316: выбрать [ФРЕЙМ;направление]
317: вариант вправо
318: Сдвиг_координат [КУРСОР_ШАГ_Х] 0
319: вариант влево
320: Сдвиг_координат "-[КУРСОР_ШАГ_Х]" 0
321: вариант вверх
322: Сдвиг_координат 0 "-[КУРСОР_ШАГ_У]"
323: вариант вниз
324: Сдвиг_координат 0 [КУРСОР_ШАГ_У]
325: вариант центр
326:
327: конецВыбора
328: Изменить_фигуру [$ОбъектЦикла]
329: следующий
330: вариант ПОВЕРНУТЬ_ФИГУРУ;ПОВЕРНУТЬ_ФИГУРУ_ПО_ЧАСОВОЙ
331: для [ФИГУРЫ_КОНТЕКСТ]
332: Взять_фигуру [$ОбъектЦикла]
333: если [ФРЕЙМ;фигура] != круг
334: Повернуть_фигуру 45
335: конец
336: Изменить_фигуру [$ОбъектЦикла]
337: следующий
338: вариант ПОВЕРНУТЬ_ФИГУРУ_ПРОТИВ_ЧАСОВОЙ
339: для [ФИГУРЫ_КОНТЕКСТ]
340: Взять_фигуру [$ОбъектЦикла]
341: если [ФРЕЙМ;фигура] != круг
342: Повернуть_фигуру -45
343: конец
344: Изменить_фигуру [$ОбъектЦикла]
345: следующий
346: вариант ИЗМЕНИТЬ_ТОЧНОСТЬ
347: Определить_свойство точность _точность обычный
348: Точность_в_число
349: вычислить * КУРСОР_ШАГ_Х $ [ФРЕЙМ;точность_число]
350: вычислить * КУРСОР_ШАГ_У $ [ФРЕЙМ;точность_число]
351: вариант НОВЫЙ_РИСУНОК
352: данные использовать [ОБЛАСТЬ_РИСУНОК]
353: данные новый
354: вариант ЗАПОМНИТЬ_РИСУНОК
355: данные использовать [ОБЛАСТЬ_РИСУНОК]
356: данные сохранить [ФАЙЛ_С_РИСУНКОМ]
357: вариант ВСПОМНИТЬ_РИСУНОК
358: если (файл существует $результат [ФАЙЛ_С_РИСУНКОМ] )
359: данные использовать [ОБЛАСТЬ_РИСУНОК]
360: данные загрузить [ФАЙЛ_С_РИСУНКОМ]
361: иначе
362: показать сообщение "Файл с рисунком '[ФАЙЛ_С_РИСУНКОМ]' не найден."
363: конец
364: вариант УДАЛИТЬ_ФИГУРУ
365: для [ФИГУРЫ_КОНТЕКСТ]
366: Взять_фигуру [$ОбъектЦикла]
367: Удалить_фигуру [$ОбъектЦикла]
368: следующий
369: конецВыбора
370: возврат
371:
372: функция Определить_свойство имя_свойства имя_категории значение_свойства_по_умолчанию
373: память локальный поз1 поз2
374: данные использовать [ОБЛАСТЬ_ГИПОТЕЗЫ]
375: если (факт сопоставитьСПервым $результат "r;<гипотеза>;[имя_категории];[?поз1];[?поз2];[?]" )
376: присвоить "ФРЕЙМ;[имя_свойства]" (список голова $результат [ПРЕДЛ;[поз1];базы] )
377: иначе
378: присвоить "ФРЕЙМ;[имя_свойства]" [значение_свойства_по_умолчанию]
379: конец
380: возврат
381:
382: функция Масштаб_в_число
383: присвоить ФРЕЙМ;масштаб_число (список отобразить $результат [ФРЕЙМ;размер] обычный;большой;больше;больший;малый;маленький;маленькая;уменьшить;увеличить "1;[МАСШТАБ_ДЛЯ_БОЛЬШОЙ];[МАСШТАБ_ДЛЯ_БОЛЬШОЙ];[МАСШТАБ_ДЛЯ_БОЛЬШОЙ];[МАСШТАБ_ДЛЯ_МАЛЫЙ];[МАСШТАБ_ДЛЯ_МАЛЫЙ];[МАСШТАБ_ДЛЯ_МАЛЫЙ];[МАСШТАБ_ДЛЯ_МАЛЫЙ];[МАСШТАБ_ДЛЯ_БОЛЬШОЙ]" 1 )
384: возврат
385:
386: функция Цвет_в_число
387: присвоить ФРЕЙМ;цвет_число (список отобразить $результат [ФРЕЙМ;цвет] белый;черный;красный;красное;желтый;зеленый;синий 16;1;10;10;12;11;13 1 )
388: возврат
389:
390: функция Количество_в_число
391: присвоить ФРЕЙМ;количество_число (список отобразить $результат [ФРЕЙМ;количество] один;два;три;тереть;четыре;пять 1;2;3;3;4;5 1 )
392: возврат
393:
394: функция Точность_в_число
395: присвоить ФРЕЙМ;точность_число (список отобразить $результат [ФРЕЙМ;точность] обычный;точный;грубый "1;0,5;2" 1 )
396: возврат
397:
398: функция Рассчитать_фигуру
399: память локальный номер_фигуры х1 у1 х2 у2 х3 у3 х4 у4 х5 у5
400:
401:
402: присвоить ФРЕЙМ;размер_х [РАЗМЕР_Х] ФРЕЙМ;размер_у [РАЗМЕР_У] ФРЕЙМ;сдвиг [СДВИГ]
403: присвоить ФРЕЙМ;еще_точки {}
404: Масштаб_в_число
405: если [ФРЕЙМ;масштаб_число] <> 1
406: вычислить * ФРЕЙМ;размер_х $ [ФРЕЙМ;масштаб_число]
407: вычислить * ФРЕЙМ;размер_у $ [ФРЕЙМ;масштаб_число]
408: вычислить * ФРЕЙМ;сдвиг $ [ФРЕЙМ;масштаб_число]
409: конец
410:
411:
412: вычислить - х1 [ПОЛОЖЕНИЕ_Х] (вычислить / $результат [ФРЕЙМ;размер_х] 2 )
413: вычислить - у1 [ПОЛОЖЕНИЕ_У] (вычислить / $результат [ФРЕЙМ;размер_у] 2 )
414: вычислить + х2 [х1] [ФРЕЙМ;размер_х] -1
415: вычислить + у2 [у1] [ФРЕЙМ;размер_у] -1
416:
417: выбрать [ФРЕЙМ;фигура]
418: вариант линия;круг
419: присвоить ФРЕЙМ;еще_точки "[х1]:[у1];[х2]:[у2]"
420: вариант квадрат
421: присвоить ФРЕЙМ;еще_точки "[х1]:[у1];[х2]:[у1];[х2]:[у2];[х1]:[у2]"
422: вариант прямоугольник
423: увеличить х2 [ФРЕЙМ;размер_х]
424: присвоить ФРЕЙМ;еще_точки "[х1]:[у1];[х2]:[у1];[х2]:[у2];[х1]:[у2]"
425: вариант треугольник
426: присвоить ФРЕЙМ;еще_точки "[х1]:[у1];[х2]:[у2];[х2]:[у1]"
427: вариант трапеция
428: вычислить - х1 [ПОЛОЖЕНИЕ_Х] (вычислить / $результат [ФРЕЙМ;размер_х] 4 )
429: вычислить - у1 [ПОЛОЖЕНИЕ_У] (вычислить / $результат [ФРЕЙМ;размер_у] 2 )
430: вычислить + х2 [ПОЛОЖЕНИЕ_Х] (вычислить / $результат [ФРЕЙМ;размер_х] 4 )
431: присвоить у2 [у1]
432: вычислить + х3 [ПОЛОЖЕНИЕ_Х] (вычислить / $результат [ФРЕЙМ;размер_х] 2 )
433: вычислить + у3 [ПОЛОЖЕНИЕ_У] (вычислить / $результат [ФРЕЙМ;размер_у] 2 )
434: вычислить - х4 [ПОЛОЖЕНИЕ_Х] (вычислить / $результат [ФРЕЙМ;размер_х] 2 )
435: присвоить у4 [у3]
436: присвоить ФРЕЙМ;еще_точки "[х1]:[у1];[х2]:[у2];[х3]:[у3];[х4]:[у4]"
437: вариант многоугольник
438: вычислить - х1 [ПОЛОЖЕНИЕ_Х] (вычислить / $результат [ФРЕЙМ;размер_х] 4 )
439: вычислить - у1 [ПОЛОЖЕНИЕ_У] (вычислить / $результат [ФРЕЙМ;размер_у] 2 )
440: вычислить + х2 [ПОЛОЖЕНИЕ_Х] (вычислить / $результат [ФРЕЙМ;размер_х] 4 )
441: присвоить у2 [у1]
442: вычислить + х3 [ПОЛОЖЕНИЕ_Х] (вычислить / $результат [ФРЕЙМ;размер_х] 2 )
443: присвоить у3 [ПОЛОЖЕНИЕ_У]
444: присвоить х4 [ПОЛОЖЕНИЕ_Х]
445: вычислить + у4 [ПОЛОЖЕНИЕ_У] (вычислить / $результат [ФРЕЙМ;размер_у] 2 )
446: вычислить - х5 [ПОЛОЖЕНИЕ_Х] (вычислить / $результат [ФРЕЙМ;размер_х] 2 )
447: присвоить у5 [у3]
448: присвоить ФРЕЙМ;еще_точки "[х1]:[у1];[х2]:[у2];[х3]:[у3];[х4]:[у4];[х5]:[у5]"
449: вариант ромб
450: вычислить - у1 [ПОЛОЖЕНИЕ_У] (вычислить / $результат [ФРЕЙМ;размер_у] 4 )
451: вычислить + х2 [ПОЛОЖЕНИЕ_Х] (вычислить / $результат [ФРЕЙМ;размер_х] 2 )
452: вычислить + у3 [ПОЛОЖЕНИЕ_У] (вычислить / $результат [ФРЕЙМ;размер_у] 4 )
453: вычислить - х4 [ПОЛОЖЕНИЕ_Х] (вычислить / $результат [ФРЕЙМ;размер_х] 2 )
454: присвоить ФРЕЙМ;еще_точки "[ПОЛОЖЕНИЕ_Х]:[у1];[х2]:[ПОЛОЖЕНИЕ_У];[ПОЛОЖЕНИЕ_Х]:[у3];[х4]:[ПОЛОЖЕНИЕ_У]"
455: конецВыбора
456:
457: Цвет_в_число
458: Количество_в_число
459: возврат
460:
461:
462:
463: функция Центр_фигуры
464: память локальный успешно х у х_мин у_мин х_макс у_макс
465: для [ФРЕЙМ;еще_точки]
466: строка сопоставить успешно [$ОбъектЦикла] "[?х];:;[?у]"
467: если [$НомерИтерации] = 1
468: присвоить х_мин [х] у_мин [у] х_макс [х] у_макс [у]
469: иначе
470: если [х_мин] > [х]
471: присвоить х_мин [х]
472: конец
473: если [х_макс] < [х]
474: присвоить х_макс [х]
475: конец
476: если [у_мин] > [у]
477: присвоить у_мин [у]
478: конец
479: если [у_макс] < [у]
480: присвоить у_макс [у]
481: конец
482: конец
483: следующий
484:
485: вычислить / ФРЕЙМ;центр_х (вычислить + $результат [х_макс] [х_мин] ) 2
486: вычислить / ФРЕЙМ;центр_у (вычислить + $результат [у_макс] [у_мин] ) 2
487: возврат
488:
489: функция Сдвиг_координат по_горизонтали по_вертикали
490: память локальный успешно еще_точки х у
491: присвоить еще_точки {}
492: для [ФРЕЙМ;еще_точки]
493: строка сопоставить успешно [$ОбъектЦикла] "[?х];:;[?у]"
494: вычислить + х $ [по_горизонтали]
495: вычислить + у $ [по_вертикали]
496: список сцепить еще_точки $ "[х]:[у]"
497: следующий
498: присвоить ФРЕЙМ;еще_точки [еще_точки]
499: возврат
500:
501: функция Изменить_масштаб масштаб
502: память локальный успешно еще_точки х у
503: Центр_фигуры
504: присвоить еще_точки {}
505: для [ФРЕЙМ;еще_точки]
506: строка сопоставить успешно [$ОбъектЦикла] "[?х];:;[?у]"
507: вычислить + х [ФРЕЙМ;центр_х] (вычислить * $результат (вычислить - $результат [х] [ФРЕЙМ;центр_х] ) [масштаб] )
508: вычислить + у [ФРЕЙМ;центр_у] (вычислить * $результат (вычислить - $результат [у] [ФРЕЙМ;центр_у] ) [масштаб] )
509: список сцепить еще_точки $ "[х]:[у]"
510: следующий
511: присвоить ФРЕЙМ;еще_точки [еще_точки]
512: возврат
513:
514: функция Повернуть_фигуру градусы
515: память локальный успешно еще_точки х у х1 у1 кос син _УГОЛ_РАДИАНЫ_
516:
517: вычислить * _УГОЛ_РАДИАНЫ_ (вычислить / $результат [градусы] 180 ) [_ПИ_]
518: вычислить косинус кос [_УГОЛ_РАДИАНЫ_]
519: вычислить синус син [_УГОЛ_РАДИАНЫ_]
520:
521: Центр_фигуры
522: присвоить еще_точки {}
523: для [ФРЕЙМ;еще_точки]
524: строка сопоставить успешно [$ОбъектЦикла] "[?х];:;[?у]"
525:
526: вычислить - х $ [ФРЕЙМ;центр_х]
527: вычислить - у $ [ФРЕЙМ;центр_у]
528: вычислить - х1 (вычислить * $результат [х] [кос] ) (вычислить * $результат [у] [син] )
529: вычислить + у1 (вычислить * $результат [х] [син] ) (вычислить * $результат [у] [кос] )
530: вычислить + х [ФРЕЙМ;центр_х] [х1]
531: вычислить + у [ФРЕЙМ;центр_у] [у1]
532:
533: список сцепить еще_точки $ "[х]:[у]"
534: следующий
535: присвоить ФРЕЙМ;еще_точки [еще_точки]
536: возврат
537:
538: функция Рисовать_фигуру
539: присвоить ФИГУРЫ_КОНТЕКСТ {}
540: данные использовать [ОБЛАСТЬ_РИСУНОК]
541: для (список сгенерить $результат 1 [ФРЕЙМ;количество_число] )
542: понятие автономер номер_фигуры <автономер> <номер_фигуры>
543: факт добавить "r;<фигура>;[номер_фигуры];[ФРЕЙМ;фигура];[ФРЕЙМ;цвет_число];{[ФРЕЙМ;еще_точки]}"
544: список сцепить ФИГУРЫ_КОНТЕКСТ $ [номер_фигуры]
545: Сдвиг_координат (вычислить + $результат [ФРЕЙМ;размер_х] [ФРЕЙМ;сдвиг] ) 0
546: следующий
547: возврат
548:
549: функция Взять_фигуру номер_фигуры
550: память локальный номер_факта
551: данные использовать [ОБЛАСТЬ_РИСУНОК]
552: факт сопоставитьСПервым номер_факта "r;<фигура>;[номер_фигуры];[?ФРЕЙМ;фигура];[?ФРЕЙМ;цвет_число];[?ФРЕЙМ;еще_точки]"
553: возврат
554:
555: функция Изменить_фигуру номер_фигуры
556: память локальный номер_факта
557: данные использовать [ОБЛАСТЬ_РИСУНОК]
558: факт сопоставитьСПервым номер_факта "r;<фигура>;[номер_фигуры];[?];[?];[?]"
559: факт присвоить [номер_факта] "r;<фигура>;[номер_фигуры];[ФРЕЙМ;фигура];[ФРЕЙМ;цвет_число];{[ФРЕЙМ;еще_точки]}"
560: возврат
561:
562: функция Удалить_фигуру номер_фигуры
563: память локальный номер_факта
564: данные использовать [ОБЛАСТЬ_РИСУНОК]
565: факт сопоставитьСПервым номер_факта "r;<фигура>;[номер_фигуры];[?];[?];[?]"
566: факт удалитьПоНомеру [номер_факта]
567: возврат
568:
569:
570:
571:
572: функция Переместить_курсор
573: выбрать [ФРЕЙМ;направление]
574: вариант вправо
575: увеличить ПОЛОЖЕНИЕ_Х [КУРСОР_ШАГ_Х]
576: вариант влево
577: увеличить ПОЛОЖЕНИЕ_Х "-[КУРСОР_ШАГ_Х]"
578: вариант вверх
579: увеличить ПОЛОЖЕНИЕ_У "-[КУРСОР_ШАГ_У]"
580: вариант вниз
581: увеличить ПОЛОЖЕНИЕ_У [КУРСОР_ШАГ_У]
582: вариант центр
583: присвоить ПОЛОЖЕНИЕ_Х [ЦЕНТР_Х] ПОЛОЖЕНИЕ_У [ЦЕНТР_У]
584: конецВыбора
585: возврат
586:
587: функция Рисовать_курсор
588: присвоить $ТолщинаЛинии 3 $ЦветЛинии 1
589:
590: рисовать линия (вычислить - $результат [ПОЛОЖЕНИЕ_Х] [РАЗМЕР_КУРСОРА] ) \
591: [ПОЛОЖЕНИЕ_У] \
592: (вычислить + $результат [ПОЛОЖЕНИЕ_Х] [РАЗМЕР_КУРСОРА] ) \
593: [ПОЛОЖЕНИЕ_У]
594: рисовать линия [ПОЛОЖЕНИЕ_Х] \
595: (вычислить - $результат [ПОЛОЖЕНИЕ_У] [РАЗМЕР_КУРСОРА] ) \
596: [ПОЛОЖЕНИЕ_Х] \
597: (вычислить + $результат [ПОЛОЖЕНИЕ_У] [РАЗМЕР_КУРСОРА] )
598:
599: присвоить $ЦветЛинии 16
600: рисовать линия (вычислить - $результат [ПОЛОЖЕНИЕ_Х] [РАЗМЕР_КУРСОРА] ) \
601: (вычислить + $результат [ПОЛОЖЕНИЕ_У] 3 ) \
602: (вычислить + $результат [ПОЛОЖЕНИЕ_Х] [РАЗМЕР_КУРСОРА] ) \
603: (вычислить + $результат [ПОЛОЖЕНИЕ_У] 3 )
604: рисовать линия (вычислить + $результат [ПОЛОЖЕНИЕ_Х] 3 ) \
605: (вычислить - $результат [ПОЛОЖЕНИЕ_У] [РАЗМЕР_КУРСОРА] ) \
606: (вычислить + $результат [ПОЛОЖЕНИЕ_Х] 3 ) \
607: (вычислить + $результат [ПОЛОЖЕНИЕ_У] [РАЗМЕР_КУРСОРА] )
608: возврат
609:
610:
611:
612: функция Перерисовать_рисунок
613: память локальный номер_факта фигура цвет_число х1 у1 х2 у2 х3 у3 х4 у4 х5 у5 \
614: успешно еще_точки
615:
616: присвоить $ЦветКисти 16
617: рисовать очистить
618: данные использовать [ОБЛАСТЬ_РИСУНОК]
619: когда [ОТЛАДКА] данные показать
620: присвоить номер_факта 1
621: пока [номер_факта] <= [$КоличествоФактов]
622: если (список сопоставить $результат (факт взять $результат [номер_факта] ) "r;<фигура>;[?];[?фигура];[?цвет_число];[?еще_точки]" )
623: присвоить $ЦветКисти [цвет_число] $ЦветЛинии [цвет_число]
624: присвоить $ТолщинаЛинии 1
625:
626: строка сопоставить успешно (список взять $результат [еще_точки] 1 ) "[?х1];:;[?у1]"
627: строка сопоставить успешно (список взять $результат [еще_точки] 2 ) "[?х2];:;[?у2]"
628:
629: выбрать [фигура]
630: вариант линия
631: рисовать линия [х1] [у1] [х2] [у2]
632: вариант круг
633: рисовать круг [х1] [у1] [х2] [у2]
634: вариант треугольник
635: строка сопоставить успешно (список взять $результат [еще_точки] 3 ) "[?х3];:;[?у3]"
636: рисовать треугольник [х1] [у1] [х2] [у2] [х3] [у3]
637: вариант квадрат;прямоугольник;трапеция;ромб
638: строка сопоставить успешно (список взять $результат [еще_точки] 3 ) "[?х3];:;[?у3]"
639: строка сопоставить успешно (список взять $результат [еще_точки] 4 ) "[?х4];:;[?у4]"
640: рисовать многоугольник [х1] [у1] [х2] [у2] [х3] [у3] [х4] [у4]
641: вариант многоугольник
642: строка сопоставить успешно (список взять $результат [еще_точки] 3 ) "[?х3];:;[?у3]"
643: строка сопоставить успешно (список взять $результат [еще_точки] 4 ) "[?х4];:;[?у4]"
644: строка сопоставить успешно (список взять $результат [еще_точки] 5 ) "[?х5];:;[?у5]"
645: рисовать многоугольник [х1] [у1] [х2] [у2] [х3] [у3] [х4] [у4] [х5] [у5]
646: конецВыбора
647: конец
648: увеличить номер_факта
649: цикл
650: Рисовать_курсор
651: возврат
652:
653: функция Загрузить_данные область_данных имя_файла
654: данные использовать [область_данных]
655: если [ДАННЫЕ_ИЗ_ИНТЕРНЕТ]
656: импорт webText "http://www.gendoc.ru/Examples/[имя_файла]" "[$ТекущийКаталог][ФАЙЛ_ВРЕМЕННЫЙ]"
657: данные загрузить "[$ТекущийКаталог][ФАЙЛ_ВРЕМЕННЫЙ]"
658: >База фактов '[имя_файла]' загружена с www.gendoc.ru.
659: иначе
660: данные загрузить "[$ТекущийКаталог][имя_файла]"
661: конец
662: возврат
663: